package com.itheima.bigevent.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Result<T> {
    /**
     * 业务状态码    0-成功，1-失败
     */
    private Integer code;
    /**
     * 提示信息
     */
    private String message;
    /**
     * 响应数据
     */
    private T data;

    /**
     * 快速返回操作成功响应结果（带响应数据）
     *
     * @param data
     * @param <E>
     * @return
     */
    public static <E> Result<E> success(E data) {
        return new Result<>(CodeType.SUCCESS.value, "操作成功", data);
    }

    /**
     * 快速返回操作成功响应结果（不带响应数据）
     *
     * @return
     */
    public static Result success() {
        return new Result(CodeType.SUCCESS.value, "操作成功", null);
    }

    /**
     * 快速返回操作失败响应结果（不带响应数据）
     *
     * @param message
     * @return
     */
    public static Result error(String message) {
        return new Result(CodeType.ERROR.value, message, null);
    }

    /**
     * 业务状态码类型
     */
    public enum CodeType {
        /**
         * 成功
         */
        SUCCESS(0),
        /**
         * 失败
         */
        ERROR(1),
        /**
         * 无权限访问
         */
        NOAUTH(2),
        /**
         * 未登录或登录超时
         */
        NOLOGIN(3);

        private final Integer value;

        CodeType(Integer value) {
            this.value = value;
        }

        public Integer getValue() {
            return this.value;
        }
    }
}
